/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Anonymous
 */
public class ChuyenXeDAO {
    
    //Hàm thêm 1 chuyến xe
    public static boolean ThemChuyenXe(DTO.ChuyenXeDTO chuyenxedto){
        int ms=LayMa();//tạo mã chuyến xe mới nhất
        //gán thời gian chạy vào datet
        java.sql.Date datet = new java.sql.Date(chuyenxedto.getThoiGianChay().getTime());
        try{
            //ma hoa ga bat dau
            String gabd=MaHoa.MaHoa(chuyenxedto.getGaBatDau());
            //ma hoa ga ket thuc
            String gakt=MaHoa.MaHoa(chuyenxedto.getGaKetThuc());
            //ma hoa so luong ve
            String soluongve=MaHoa.MaHoa(chuyenxedto.getSoLuongVe()+"");
            //ma hoa gioi han ve
            String gioihanve=MaHoa.MaHoa(chuyenxedto.getGioiHanVe()+"");
            //ma hoa gia tien
            String giatien=MaHoa.MaHoa(chuyenxedto.getGiaTien()+"");
            
            Connect.connect();//mở kết nối với sql server
            
            //thực hiện thêm chuyến xe
            PreparedStatement ps;
            ps= Connect.con.prepareCall("insert into T_ChuyenXe(MaChuyen,GaBatDau,GaKetThuc,ThoiGianChay,SoLuongVe,SoVeDuocMua,GiaTien) "
           + "values(?,?,?,?,?,?,?)");
            ps.setInt(1, ms);
            ps.setNString(2, gabd);
            ps.setNString(3, gakt);
            ps.setTimestamp(4,new java.sql.Timestamp(datet.getTime()));
            ps.setNString(5, soluongve);
            ps.setNString(6, gioihanve);
            ps.setNString(7, giatien);
            
            
            if(ps.executeUpdate()!=0){//Nếu thêm thành công
                System.out.println("insert successfull");
                Connect.con.close();//đóng kết nối sql server
                return true;
            }
            else{//Ngược lại nếu thất bại
                System.out.println("insert fail");
                Connect.con.close();//đóng kết nối sql server
                return false;
            }  
        }
        catch (SQLException ex) {
            Logger.getLogger(ChuyenXeDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            Connect.con.close();//đóng kết nối sql server
        } catch (SQLException ex) {
            Logger.getLogger(ChuyenXeDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    //Hàm cập nhật chuyến xe
    public static boolean CnChuyenXe(DTO.ChuyenXeDTO chuyenxedto) {
        //gán thời gian chạy vào datet
        java.sql.Date datet = new java.sql.Date(chuyenxedto.getThoiGianChay().getTime());
        //ma hoa ga bat dau
        String gabd=MaHoa.MaHoa(chuyenxedto.getGaBatDau());
        //ma hoa ga ket thuc
        String gakt=MaHoa.MaHoa(chuyenxedto.getGaKetThuc());
        //ma hoa so luong ve
        String soluongve=MaHoa.MaHoa(chuyenxedto.getSoLuongVe()+"");
        //ma hoa gioi han ve
        String gioihanve=MaHoa.MaHoa(chuyenxedto.getGioiHanVe()+"");
        //ma hoa gia tien
        String giatien=MaHoa.MaHoa(chuyenxedto.getGiaTien()+"");
        try{
            Connect.connect();//mở kết nối sql server
            
            //Cập nhật thông tin chuyến xe
            PreparedStatement ps;
            ps= Connect.con.prepareCall("update T_ChuyenXe set GaBatDau=?,GaKetThuc=?,ThoiGianChay=?,SoLuongVe=?,SoVeDuocMua=?,GiaTien=? where MaChuyen=?");
            ps.setInt(7, chuyenxedto.getMaChuyen());
            ps.setNString(1, gabd);
            ps.setNString(2, gakt);
            ps.setTimestamp(3,new java.sql.Timestamp(datet.getTime()));
            ps.setNString(4, soluongve );
            ps.setNString(5, gioihanve);
            ps.setNString(6, giatien);
            if(ps.executeUpdate()!=0){//Nếu cập nhật thành công
                System.out.println("update successfull");
                Connect.con.close();//đóng kết nối sql server
                return true;
            }
            else{//ngược lại nếu thất bại
                System.out.println("update fail");
                Connect.con.close();//đóng kết nối sql server
                return false;
            }  
        }
        catch (SQLException ex) {
            Logger.getLogger(ChuyenXeDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            Connect.con.close();//đóng kết nối sql server
        } catch (SQLException ex) {
            Logger.getLogger(ChuyenXeDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    //Hàm tạo mã cho chuyến xe
    public static  int LayMa(){
            String sql = "select top 1 MaChuyen from T_ChuyenXe order by MaChuyen desc";
            ResultSet kq=Connect.Xlsql(sql);//thực hiện câu truy vấn đưa kết quả vào resultset
            int maso = 0;
            try{
                if(kq.next()){
                    maso=kq.getInt("MaChuyen");
 
                    Connect.con.close();
                }
            }
            catch(SQLException ex){
                System.out.println(ex.getMessage());
            }
            return maso+1;     
        }
    
    //Hàm lấy danh sách chuyến xe
    public static List<DTO.ChuyenXeDTO> dsChuyenXe(){
        List<DTO.ChuyenXeDTO> Lchuyenxedto= new ArrayList<DTO.ChuyenXeDTO>();
        DTO.ChuyenXeDTO chuyenxedto;
        String sql = "select * from T_ChuyenXe order by ThoiGianChay DESC";
        ResultSet kq=Connect.Xlsql(sql);//thực hiện câu truy vấn đưa kết quả vào resultset
        try {
            while(kq.next()){
                   	  
                    
                    chuyenxedto=new DTO.ChuyenXeDTO();
                    chuyenxedto.setMaChuyen(kq.getInt("MaChuyen"));
                    //giai ma ga bat dau
                    String gabd=kq.getNString("GaBatDau");
                    chuyenxedto.setGatBatDau(MaHoa.GiaiMa(gabd));
                    //giai ma ga ket thuc
                    String gakt=kq.getNString("GaKetThuc");
                    chuyenxedto.setGaKetThuc(MaHoa.GiaiMa(gakt)); 
                    chuyenxedto.setThoiGianChay(kq.getTimestamp("ThoiGianChay"));
                    //giai ma  so luong ve
                    String soluongve=kq.getNString("SoLuongVe");
                    int slv=Integer.parseInt(MaHoa.GiaiMa(soluongve));
                    chuyenxedto.setSoLuongVe(slv);
                    //giai ma so luong ve duoc mua
                    String sovedat=kq.getNString("SoVeDuocMua");
                    int svdat=Integer.parseInt(MaHoa.GiaiMa(sovedat));
                    chuyenxedto.setGioiHanVe(svdat);
                    chuyenxedto.setVeDaDat(SoVeDD(chuyenxedto.getMaChuyen()));
                    //giai ma  gia tien
                    String giatien=kq.getNString("GiaTien");
                    int gt=Integer.parseInt(MaHoa.GiaiMa(giatien));
                    chuyenxedto.setGiaTien(gt);
                    Lchuyenxedto.add(chuyenxedto);
            }
        
            Connect.con.close();
        } catch (SQLException ex) {
            Logger.getLogger(ChuyenXeDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Lchuyenxedto;      
    }
    
    //Hàm lấy danh sách chuyến xe chưa chạy
    public static List<DTO.ChuyenXeDTO> dsChuyenXecl(){
        
        List<DTO.ChuyenXeDTO> Lchuyenxedto= new ArrayList<DTO.ChuyenXeDTO>();
        DTO.ChuyenXeDTO chuyenxedto;
        java.util.Date tam=new java.util.Date();
        java.sql.Date datet = new java.sql.Date(tam.getTime());
        
        String sql = "select * from T_ChuyenXe where ThoiGianChay >'"+new java.sql.Timestamp(datet.getTime())+"' order by ThoiGianChay DESC";
        ResultSet kq=Connect.Xlsql(sql);//thực hiện câu truy vấn đưa kết quả vào resultset
        try {
            while(kq.next()){
                    
                    chuyenxedto=new DTO.ChuyenXeDTO();
                    chuyenxedto.setMaChuyen(kq.getInt("MaChuyen"));
                    //giai ma ga bat dau
                    String gabd=kq.getNString("GaBatDau");
                    chuyenxedto.setGatBatDau(MaHoa.GiaiMa(gabd));
                    //giai ma ga ket thuc
                    String gakt=kq.getNString("GaKetThuc");
                    chuyenxedto.setGaKetThuc(MaHoa.GiaiMa(gakt)); 
                    chuyenxedto.setThoiGianChay(kq.getTimestamp("ThoiGianChay"));
                    //giai ma  so luong ve
                    String soluongve=kq.getNString("SoLuongVe");
                    int slv=Integer.parseInt(MaHoa.GiaiMa(soluongve));
                    chuyenxedto.setSoLuongVe(slv);
                    //giai ma so luong ve duoc mua
                    String sovedat=kq.getNString("SoVeDuocMua");
                    int svdat=Integer.parseInt(MaHoa.GiaiMa(sovedat));
                    chuyenxedto.setGioiHanVe(svdat);
                    chuyenxedto.setVeDaDat(SoVeDD(chuyenxedto.getMaChuyen()));
                    //giai ma  gia tien
                    String giatien=kq.getNString("GiaTien");
                    int gt=Integer.parseInt(MaHoa.GiaiMa(giatien));
                    chuyenxedto.setGiaTien(gt);
                    Lchuyenxedto.add(chuyenxedto);
            }
        
            Connect.con.close();
        } catch (SQLException ex) {
            Logger.getLogger(ChuyenXeDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return Lchuyenxedto;      
    }
    
    //Hàm lấy thông tin 1 chuyến xe với đầu vào là mã chuyến 
    public static DTO.ChuyenXeDTO ttChuyenXe(int machuyen) {
        DTO.ChuyenXeDTO chuyenxedto=new DTO.ChuyenXeDTO();
        String sql = "select * from T_ChuyenXe where MaChuyen="+machuyen+" order by ThoiGianChay DESC";
        ResultSet kq=Connect.Xlsql(sql);//thực hiện câu truy vấn đưa kết quả vào resultset
        try {
            while(kq.next()){
                    chuyenxedto.setMaChuyen(kq.getInt("MaChuyen"));
                    //giai ma ga bat dau
                    String gabd=kq.getNString("GaBatDau");
                    chuyenxedto.setGatBatDau(MaHoa.GiaiMa(gabd));
                    //giai ma ga ket thuc
                    String gakt=kq.getNString("GaKetThuc");
                    chuyenxedto.setGaKetThuc(MaHoa.GiaiMa(gakt)); 
                    chuyenxedto.setThoiGianChay(kq.getTimestamp("ThoiGianChay"));
                    //giai ma  so luong ve
                    String soluongve=kq.getNString("SoLuongVe");
                    int slv=Integer.parseInt(MaHoa.GiaiMa(soluongve));
                    chuyenxedto.setSoLuongVe(slv);
                    //giai ma so luong ve duoc mua
                    String sovedat=kq.getNString("SoVeDuocMua");
                    int svdat=Integer.parseInt(MaHoa.GiaiMa(sovedat));
                    chuyenxedto.setGioiHanVe(svdat);
                    chuyenxedto.setVeDaDat(SoVeDD(chuyenxedto.getMaChuyen()));
                    //giai ma  gia tien
                    String giatien=kq.getNString("GiaTien");
                    int gt=Integer.parseInt(MaHoa.GiaiMa(giatien));
                    chuyenxedto.setGiaTien(gt);
            }
        
            Connect.con.close();
        } catch (SQLException ex) {
            Logger.getLogger(ChuyenXeDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return chuyenxedto;      
    }
    
    //Hàm lấy số vé đã đặt cho chuyến xe có đầu vào là mã chuyến
    public static int SoVeDD(int machuyen){
        int sv=0;
        //ma hoa trangthai
        String trangthai=MaHoa.MaHoa("0");
        String sql = "select * from T_DatVe where MaChuyen="+machuyen+" AND TrangThai=N'"+trangthai+"'";
        ResultSet kq=Connect.Xlsql(sql);//thực hiện câu truy vấn đưa kết quả vào resultset
        try {
            while(kq.next()){
                    String sovedat=kq.getNString("SoLuongVe");
                    int svdat=Integer.parseInt(MaHoa.GiaiMa(sovedat));
                    sv+=svdat;
            }
        
            Connect.con.close();
        } catch (SQLException ex) {
            Logger.getLogger(ChuyenXeDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        return sv;      
    }
    
    //Hàm xóa chuyến xe
    public static  boolean XoaChuyenXe(int machuyen){
        String caulenh="delete T_ChuyenXe where  MaChuyen=" + machuyen;
        return Connect.Xlsql2(caulenh);//thực hiện câu sql và trả về thành công hay thất bại
    }

}
